﻿package core.image.psd
{
    import flash.geom.*;
    import flash.utils.*;

    public class Mask extends Object
    {
        public var Dimensions:Rectangle;
        public var Data:ByteArray;
        public var Flags:int = 0;
        public var DefaultColor:int = 0;

        public function Mask()
        {
            this.Dimensions = new Rectangle();
            this.Data = new ByteArray();
            return;
        }// end function

        public static function Load(param1:ByteArrayReader) : Mask
        {
            var _loc_2:int = 0;
            var _loc_3:int = 0;
            var _loc_4:Rectangle = null;
            var _loc_5:* = new Mask;
            var _loc_6:* = param1.ReadUInt32();
            if (_loc_6 <= 0)
            {
                return new Mask;
            }
            var _loc_7:* = param1.Position;
            _loc_5.Dimensions.y = param1.ReadInt32();
            _loc_5.Dimensions.x = param1.ReadInt32();
            _loc_5.Dimensions.height = param1.ReadInt32() - _loc_5.Dimensions.y;
            _loc_5.Dimensions.width = param1.ReadInt32() - _loc_5.Dimensions.x;
            _loc_5.DefaultColor = param1.ReadByte();
            _loc_5.Flags = param1.ReadByte();
            if (_loc_6 === 36)
            {
                _loc_2 = param1.ReadByte();
                _loc_3 = param1.ReadByte();
                _loc_4 = new Rectangle();
                _loc_4.y = param1.ReadInt32();
                _loc_4.x = param1.ReadInt32();
                _loc_4.height = param1.ReadInt32() - _loc_5.Dimensions.y;
                _loc_4.width = param1.ReadInt32() - _loc_5.Dimensions.x;
            }
            param1.Position = _loc_7 + _loc_6;
            return _loc_5;
        }// end function

        public static function LoadPixelData(_arg4:ByteArrayReader, _arg4:Mask, _arg4:Layer, _arg4:PSDFile) : void
        {
            var _loc_5:Array = null;
            var _loc_6:int = 0;
            var _loc_7:int = 0;
            var _loc_8:int = 0;
            var _loc_12:int = 0;
            var _loc_13:int = 0;
            if (_arg4.Dimensions.isEmpty() || _arg4.SortedChannels[-2] == null)
            {
                return;
            }
            var _loc_9:* = _arg4.SortedChannels[-2];
            var _loc_10:* = new ByteArrayReader(_arg4.Read(_loc_9.Length));
            var _loc_11:* = new ByteArrayReader(_loc_9.Data);
            _loc_9.ImageCompression = _loc_11.ReadInt16();
            switch(_arg4.header.Depth)
            {
                case 16:
                {
                    _loc_12 = _arg4.Dimensions.width * 2;
                    break;
                }
                case 1:
                case 8:
                {
                }
                default:
                {
                    _loc_12 = _arg4.Dimensions.width;
                    break;
                }
            }
            while (_loc_13 < _arg4.Dimensions.height * _loc_12)
            {
                
                _loc_9.Data[_loc_13] = 171;
                _loc_13++;
            }
            switch(_loc_9.ImageCompression)
            {
                case 0:
                {
                    _loc_9.Data = _loc_11.Read(_arg4.Dimensions.height * _loc_12);
                    break;
                }
                case 1:
                {
                    _loc_5 = [];
                    _loc_6 = 0;
                    while (_loc_6 < _arg4.Dimensions.height)
                    {
                        
                        _loc_5[_loc_6] = _loc_11.ReadInt16();
                        _loc_6++;
                    }
                    _loc_7 = 0;
                    while (_loc_7 < _arg4.Dimensions.height)
                    {
                        
                        _loc_8 = _loc_7 * _arg4.Dimensions.width;
                        ImageHelper.DecodeRleRow(_loc_11, _arg4.Data, _arg4.Dimensions.height * _loc_12, _loc_8, _loc_12);
                        _loc_7++;
                    }
                    break;
                }
                default:
                {
                    break;
                }
            }
            _loc_9.Data.readBytes(_arg4.Data, 0, _loc_9.Data.length);
            return;
        }// end function

    }
}
